package field

import (
	"strings"
	"yunj/pkg/yunj/core/builder/builderdto"
	"yunj/pkg/yunj/core/builder/form"
	"yunj/pkg/yunj/util"
)

// 年份：格式yyyy
type Year struct {
	form.Field
	Placeholder string                        `json:"placeholder"` // 占位符
	Min         string                        `json:"min"`         // 最小日期，格式yyyy
	Max         string                        `json:"max"`         // 最大日期，格式yyyy
	Range       string                        `json:"range"`       // 范围选择开启
	Shortcuts   []builderdto.FormDateShortcut `json:"shortcuts"`   // 左侧的快捷选择栏
}

func NewYear(id string, title ...string) *Year {
	f := &Year{}
	form.SetFieldInstance(&f.Field, f)
	f.SetFieldId(id)
	if len(title) > 0 {
		f.SetTitle(title[0])
	}
	return f
}

// 设置标题
func (f *Year) SetTitle(title string) *Year {
	f.Title = title
	return f
}

// 设置默认值
func (f *Year) SetDefault(def any) *Year {
	f.Default = def
	return f
}

// 设置描述
func (f *Year) SetDesc(desc string) *Year {
	f.Desc = desc
	return f
}

// 设置验证规则
func (f *Year) SetVerify(rule string) *Year {
	f.Verify = rule
	return f
}

// 设置验证标题
func (f *Year) SetVerifyTitle(verifyTitle string) *Year {
	f.VerifyTitle = verifyTitle
	return f
}

// 增加验证规则
func (f *Year) AddVerify(rule string) *Year {
	f.AddFieldVerify(rule)
	return f
}

// 设置是否只读
func (f *Year) SetReadonly(yes bool) *Year {
	f.Readonly = yes
	return f
}

// 设置栅格布局
// 超小屏幕(手机<768px)、小屏幕(平板≥768px)、中等屏幕(桌面≥992px)、大型屏幕(桌面≥1200px)、超大屏幕(桌面≥1400px)
// 总列数：12
func (f *Year) SetGrid(num ...any) *Year {
	f.Grid = num
	return f
}

// 设置权限
func (f *Year) SetAuth(auth string) *Year {
	f.Auth = auth
	return f
}

// 设置占位符
func (f *Year) SetPlaceholder(placeholder string) *Year {
	f.Placeholder = placeholder
	return f
}

// 设置最小日期，格式yyyy
func (f *Year) SetMin(min string) *Year {
	f.Min = min
	return f
}

// 设置最大日期，格式yyyy
func (f *Year) SetMax(max string) *Year {
	f.Max = max
	return f
}

// 范围选择开启
func (f *Year) SetRange(mark string) *Year {
	f.Range = mark
	return f
}

// 范围左侧的快捷选择栏
func (f *Year) SetShortcuts(shortcuts []builderdto.FormDateShortcut) *Year {
	f.Shortcuts = shortcuts
	return f
}

// 处理属性
func (f *Year) HandleAttr() error {
	verifyType := util.LcFirst(f.Type)
	if f.Range == "" {
		// 单选
		if !strings.Contains(f.Verify, verifyType) {
			if f.Verify == "" {
				f.Verify = verifyType
			} else {
				f.Verify += "|" + verifyType
			}
		}
	} else {
		// 范围选择
		if !strings.Contains(f.Verify, "timeRange") {
			if f.Verify == "" {
				f.Verify = "timeRange:" + verifyType
			} else {
				f.Verify += "|timeRange:" + verifyType
			}
		}
	}
	return nil
}
